/*
    贪心经典题目专题4

    前置知识: 
    讲解005、042 - 对数器
    讲解025、026、027 - 基础排序、有序表、比较器、堆结构

    狭义的贪心
    每一步都做出在当前状态下最好或最优的选择，从而希望最终的结果是最好或最优的算法

    广义的贪心
    通过分析题目自身的特点和性质，只要发现让求解答案的过程得到加速的结论，都算广义的贪心

    贪心是最符合自然智慧的思想，一般分析门槛不高
    理解基本的排序、有序结构，有基本的逻辑思维就能理解
    但是贪心的题目，千题千面，极难把握
    难度在于证明局部最优可以得到全局最优，好在！我们有对数器！贪心专题2、3，这两节大量使用对数器

    ================================================

    有关贪心的若干现实 & 提醒
    1，不要去纠结严格证明，每个题都去追求严格证明，浪费时间、收益很低，而且千题千面。玄学！
    2，一定要掌握用对数器验证的技巧，这是解决贪心问题的关键
    3，解法几乎只包含贪心思路的题目，代码量都不大
    4，大量累积贪心的经验，重点不是证明，而是题目的特征，以及贪心方式的特征，做好总结方便借鉴
    5，关注题目数据量，题目的解可能来自贪心，也很可能不是，如果数据量允许，能不用贪心就不用（稳）
    6，贪心在笔试中出现概率不低，但是面试中出现概率较低，原因是 淘汰率 vs 区分度
    7，广义的贪心无所不在，可能和别的思路结合，一般都可以通过自然智慧想明白，依然不纠结证明

    ================================================

    题目1
    数组的最小偏移量
    给你一个由n个正整数组成的数组nums
    你可以对数组的任意元素执行任意次数的两类操作：
    如果元素是偶数，除以2
    例如如果数组是[1,2,3,4]
    那么你可以对最后一个元素执行此操作，使其变成[1,2,3,2]
    如果元素是奇数，乘上2
    例如如果数组是[1,2,3,4]
    那么你可以对第一个元素执行此操作，使其变成[2,2,3,4]
    数组的偏移量是数组中任意两个元素之间的最大差值
    返回数组在执行某些操作之后可以拥有的最小偏移量
    测试链接 : https://leetcode.cn/problems/minimize-deviation-in-array/

    ================================================

    题目2
    森林中的兔子
    森林中有未知数量的兔子
    你问兔子们一个问题: "还有多少只兔子与你颜色相同?"
    你将答案收集到了一个数组answers中
    你可能没有收集到所有兔子的回答，可能只是一部分兔子的回答
    其中answers[i]是第i只兔子的答案
    所有兔子都不会说错，返回森林中兔子的最少数量
    测试链接 : https://leetcode.cn/problems/rabbits-in-forest/

    ================================================

    题目3
    使数组相似的最少操作次数
    给你两个正整数数组 nums 和 target ，两个数组长度相等
    在一次操作中，你可以选择两个 不同 的下标 i 和 j
    其中 0 <= i, j < nums.length ，并且：
    令 nums[i] = nums[i] + 2 并令 nums[j] = nums[j] - 2
    如果两个数组中每个元素出现的频率相等，我们称两个数组是 相似 的
    请你返回将 nums 变得与 target 相似的最少操作次数
    测试数据保证 nums 一定能变得与 target 相似
    测试链接 : https://leetcode.cn/problems/minimum-number-of-operations-to-make-arrays-similar/

    ================================================
    
    题目4
    知识竞赛
    最近部门要选两个员工去参加一个需要合作的知识竞赛，
    每个员工均有一个推理能力值ai，以及一个阅读能力值bi
    如果选择第i个人和第j个人去参加竞赛，
    两人在推理方面的能力为X = (ai + aj)/2
    两人在阅读方面的能力为Y = (bi + bj)/2
    现在需要最大化他们表现较差一方面的能力
    即让min(X,Y) 尽可能大，问这个值最大是多少
    测试链接 : https://www.nowcoder.com/practice/2a9089ea7e5b474fa8f688eae76bc050

    ================================================

    题目5
    将数组分成几个递增序列
    给你一个有序的正数数组 nums 和整数 K
    判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列
    数组中的所有数字，都要被，若干不相交的递增子序列包含
    测试链接 : https://leetcode.cn/problems/divide-array-into-increasing-sequences/

    ================================================

    题目6
    最低加油次数
    汽车从起点出发驶向目的地，该目的地位于出发位置东面target英里处
    沿途有加油站，用数组stations表示，其中 stations[i] = [positioni, fueli]
    表示第i个加油站位于出发位置东面positioni英里处，并且有fueli升汽油
    假设汽车油箱的容量是无限的，其中最初有startFuel升燃料
    它每行驶1英里就会用掉1升汽油
    当汽车到达加油站时，它可能停下来加油，将所有汽油从加油站转移到汽车中
    为了到达目的地，汽车所必要的最低加油次数是多少？
    如果无法到达目的地，则返回-1
    注意：如果汽车到达加油站时剩余燃料为0，它仍然可以在那里加油
    如果汽车到达目的地时剩余燃料为0，仍然认为它已经到达目的地
    测试链接 : https://leetcode.cn/problems/minimum-number-of-refueling-stops/

*/